// Copyright (c) 2021 G_night

/*
定义基本参数：
	0. 池默认设置
	1. 状态参数
	2. 错误描述
	3. 基本方法定义（具体实现迁移道不同模块）
*/

package agopool

import (
	"errors"
	"log"
	"math"
	"runtime"
)

// 池默认设置
const (
	// 默认大小，约占据0.5G
	DefaultAgoPoolSize = math.MaxInt32

	// 默认阻塞
	DefaultIsBlock = true
)

// 状态定义
type PoolStatus int32

// 状态参数
const (
	// 运行中
	OPENED = iota

	// 关闭运行
	CLOSED
)

// 错误描述
var (
	// 池大小错误
	InvalidSizeError = errors.New("the pool size is not valid")

	// 池溢出
	OverFlowError = errors.New("the pool size is overflow")

	// 池已关闭
	PoolClosedError = errors.New("the pool has been closed")

	// 默认错误处理
	defaultDisposeError = func(err interface{}) {
		log.Printf("[agopool] Worker panic: %s\n", err)
	}

	// 超时
	TimeoutError = errors.New("the pool out of time")
)

// 基本行为定义
var (
	// 获取worker中通道大小
	workerChanCap = func() int {
		if runtime.GOMAXPROCS(0) == 1 {
			return 0
		}
		return 1
	}()
)
